ViewModel ক্লাসের ভূমিকা এবং ইমপ্লিমেন্টেশন

Microsoft Technologies - এমভিভিএম (MVVM) ViewModel তৈরি এবং কনফিগারেশন (Creating and Configuring ViewModel) |
171
171

MVVM প্যাটার্নে ViewModel হল একটি গুরুত্বপূর্ণ উপাদান যা View এবং Model এর মধ্যে সেতুবন্ধন হিসেবে কাজ করে। ViewModel এর মূল কাজ হল Model থেকে ডেটা গ্রহণ করা এবং সেই ডেটাকে View-এ উপস্থাপনযোগ্য ফরম্যাটে রূপান্তর করা। এটি View এর সাথে সরাসরি যোগাযোগ না করলেও ডেটা বাইন্ডিংয়ের মাধ্যমে View-এ ডেটা পাঠায় এবং View থেকে ইনপুট গ্রহণ করে তা Model-এ পাঠায়।


ViewModel ক্লাসের ভূমিকা

  1. ডেটা প্রস্তুতি: ViewModel Model থেকে ডেটা নিয়ে তা View এর জন্য প্রস্তুত করে। উদাহরণস্বরূপ, একটি প্রোডাক্টের নাম এবং মূল্য নিয়ে আসলে ViewModel সেই ডেটাকে View-এ প্রদর্শনযোগ্য আকারে উপস্থাপন করবে।
  2. UI লজিক এবং বিজনেস লজিক: ViewModel UI লজিক যেমন একটি ভ্যালিডেশন চেক, ডেটা প্রসেসিং বা কোনো প্রকার ক্যালকুলেশন পরিচালনা করে। তবে এটি View এর সাথে সরাসরি ইন্টারঅ্যাক্ট করে না।
  3. ডেটা বাইন্ডিং: ViewModel-এ থাকা প্রপার্টিগুলি View এর UI উপাদানগুলির সাথে বাইন্ড করা হয়। এর মাধ্যমে View-এ ডেটা এবং ViewModel এর মধ্যে সিঙ্ক্রোনাইজেশন রক্ষা হয়।
  4. ইউজার ইন্টারঅ্যাকশন হ্যান্ডলিং: ViewModel ব্যবহারকারী থেকে প্রাপ্ত ইনপুট (যেমন বাটন ক্লিক) গ্রহণ করে এবং এটি প্রক্রিয়া করে বা Model-এ পাঠায়। Command প্যাটার্ন ব্যবহার করে এটি খুব সহজে করা যায়।

ViewModel ক্লাসের ইমপ্লিমেন্টেশন

ViewModel ক্লাস সাধারণত INotifyPropertyChanged ইন্টারফেসের মাধ্যমে View-এ ডেটা পরিবর্তন সিগন্যাল পাঠানোর ব্যবস্থা করে। এটি View-কে জানিয়ে দেয় যে কোনো প্রপার্টির মান পরিবর্তিত হয়েছে এবং View তখন সেই পরিবর্তন রিফ্লেক্ট করতে পারে।

1. INotifyPropertyChanged ইন্টারফেস ব্যবহার

INotifyPropertyChanged ইন্টারফেসের মাধ্যমে ViewModel জানাতে পারে যে কোনো প্রপার্টি পরিবর্তিত হলে তা View-এ প্রতিফলিত হবে।

public class ProductViewModel : INotifyPropertyChanged
{
    private string _productName;
    private decimal _price;

    public string ProductName
    {
        get { return _productName; }
        set
        {
            if (_productName != value)
            {
                _productName = value;
                OnPropertyChanged(nameof(ProductName));
            }
        }
    }

    public decimal Price
    {
        get { return _price; }
        set
        {
            if (_price != value)
            {
                _price = value;
                OnPropertyChanged(nameof(Price));
            }
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;

    protected virtual void OnPropertyChanged(string propertyName)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
}

এখানে, ProductName এবং Price প্রপার্টির জন্য যখনই মান পরিবর্তন হবে, OnPropertyChanged মেথডটি কল হবে এবং এটি View কে জানিয়ে দেবে যে ওই প্রপার্টির মান পরিবর্তিত হয়েছে।


2. Command Pattern ইমপ্লিমেন্টেশন

ViewModel-এ কমান্ড ব্যবহার করা হয় ইউজার ইন্টারঅ্যাকশন (যেমন বাটন ক্লিক) হ্যান্ডল করার জন্য। RelayCommand একটি সাধারণ কমান্ড ইমপ্লিমেন্টেশন যা ইউজারের ইন্টারঅ্যাকশন সিঙ্গনাল গ্রহণ করে এবং একটি মেথড কল করে।

public class RelayCommand : ICommand
{
    private readonly Action _execute;
    private readonly Func<bool> _canExecute;

    public RelayCommand(Action execute, Func<bool> canExecute = null)
    {
        _execute = execute;
        _canExecute = canExecute;
    }

    public event EventHandler CanExecuteChanged
    {
        add { CommandManager.RequerySuggested += value; }
        remove { CommandManager.RequerySuggested -= value; }
    }

    public bool CanExecute(object parameter)
    {
        return _canExecute == null || _canExecute();
    }

    public void Execute(object parameter)
    {
        _execute();
    }
}

এই কমান্ডটি ViewModel-এ ইমপ্লিমেন্ট করা যেতে পারে:

public class ProductViewModel
{
    public ICommand AddProductCommand { get; }

    public ProductViewModel()
    {
        AddProductCommand = new RelayCommand(AddProduct, CanAddProduct);
    }

    private void AddProduct()
    {
        // প্রোডাক্ট যোগ করার লজিক
    }

    private bool CanAddProduct()
    {
        return !string.IsNullOrEmpty(ProductName) && Price > 0;
    }
}

এখানে, AddProductCommand কমান্ডটি একটি মেথড কল করবে যখন ইউজার একটি বাটন ক্লিক করবে। CanAddProduct মেথডটি চেক করবে যে প্রোডাক্ট নাম এবং মূল্য সঠিকভাবে প্রবেশ করা হয়েছে কি না।


Conclusion

ViewModel হল MVVM প্যাটার্নের একটি গুরুত্বপূর্ণ অংশ, যা View এবং Model এর মধ্যে সম্পর্ক স্থাপন করে। এটি ডেটা বাইন্ডিং, কমান্ড প্যাটার্ন, এবং UI লজিক পরিচালনা করে, যার মাধ্যমে অ্যাপ্লিকেশনটির কার্যকারিতা এবং মেইনটেনেন্স অনেক সহজ হয়।

common.content_added_by
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion